#ifndef __sk6812_SIP_H
#define __sk6812_SIP_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "main.h"
#include <stdint.h>

//            编码 0 : 11000000
#define CODE_0 0xc0
//            编码 1 : 11111000
#define CODE_1 0xF8
/*ws2812b灯珠数量*/
#define WS2812B_AMOUNT 30

    typedef struct
    {
        uint8_t R;
        uint8_t G;
        uint8_t B;
    } tWs2812bCache_TypeDef;
    
    // 灯效模式枚举，用于切换
    typedef enum {
        EFFECT_RAINBOW_WAVE = 0,
        EFFECT_RED_GREEN_WAVE = 1,
        EFFECT_RED_WAVE = 2
    } effect_mode_t;

    extern SPI_HandleTypeDef Spi1Handle;
    extern tWs2812bCache_TypeDef gWs2812bDat[WS2812B_AMOUNT];
    void WS2812b_Set(uint16_t Ws2b812b_NUM, uint8_t r, uint8_t g, uint8_t b);
    void WS2812B_Task(void);
    
    // Red Wave纯红色波浪效果
    void red_wave_effect(void);
    // Red Green Wave红绿波浪效果
    void red_green_wave_effect(void);
    // HSV转RGB颜色转换函数
    void hsv_to_rgb(float h, float s, float v, uint8_t *r, uint8_t *g, uint8_t *b);
    // Rainbow wave彩虹波浪效果
    void rainbow_wave_effect(void);
    
    // 切换到下一个灯效模式
    void switch_to_next_effect(void);

#ifdef __cplusplus
}
#endif

#endif /* __sk6812_SIP_H */
// Red Wave纯红色波浪效果
void red_wave_effect(void);

